Micron Document
Aleph Git

Node / reticulum / sideband / files / docs / example_plugins / server_telemetry.py

Displaying Raw • Download

docs/example_plugins/server_telemetry.py HEAD (8b8a5035) Text, 4.71 KB

T8b949e# This is a basic server telemetry plugin
T8b949e# example that you can build upon to
T8b949e# implement your own telemetry plugins.

Tff7b72import T7ee787RNS
Tff7b72import T7ee787time
Tff7b72import T7ee787psutil
Tff7b72import T7ee787shutil
Tff7b72from T7ee787threading Tff7b72import Te6edf3Thread
Tff7b72import T7ee787urllibT7ee787.T7ee787requestTff7b72, T7ee787json

Tff7b72class T56d364ServerTelemetryPluginTb4b4b4(Te6edf3SidebandTelemetryPluginTb4b4b4)Tb4b4b4:
Te6edf3plugin_name Tff7b72= Ta5d6ff"Ta5d6ffserver_telemetryTa5d6ff"

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any initialisation work here
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffServer Telemetry plugin starting...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinitialise_valuesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpower_stats Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffstorage_stats Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fftarget_disk Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffblkidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffmmcblk0p2Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflabelTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSD CardTa5d6ff"Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_thread Tff7b72= Te6edf3ThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ffupdate_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

T8b949e# And finally call start on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any teardown work here
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False

T8b949e# And finally call stop on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffinitialise_valuesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbattery_percent Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpower_production Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpower_consumption Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbattery_charging Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbattery_temperature Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffuptime Tff7b72= Tff7b72None

Tff7b72def Td2a8ffupdate_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72tryTb4b4b4:
T8b949e# Update uptime
Tff7b72selfTff7b72.Td2a8ffuptime Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3psutilTff7b72.Td2a8ffboot_timeTb4b4b4(Tb4b4b4)Tb4b4b4)

T8b949e# Update power values if enabled
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpower_statsTb4b4b4:
Tff7b72with Te6edf3urllibTff7b72.Td2a8ffrequestTff7b72.Td2a8ffurlopenTb4b4b4(Ta5d6ff"Ta5d6ffhttp://some_host/status.jsonTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3urlTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3urlTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpower_production Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffsolar_yieldTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpower_consumption Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffinverter_loadTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffdc_consumptionTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffbattery_charging Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_currentTa5d6ff"Tb4b4b4] Tff7b72>Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ffbattery_charge Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_chargeTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffbattery_temperature Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffbattery_temperatureTa5d6ff"Tb4b4b4]

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating plugin telemetry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)

Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff15Tb4b4b4)

Tff7b72def Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3telemeterTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3telemeter Tff7b72!= Tff7b72NoneTb4b4b4:

Tff7b72if Tff7b72selfTff7b72.Td2a8ffpower_statsTb4b4b4:
T8b949e# Create power consumption sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffpower_consumptionTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffpower_consumptionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_consumerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpower_consumptionTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffPower consumptionTa5d6ff"Tb4b4b4)

T8b949e# Create power production sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffpower_productionTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffpower_productionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_producerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpower_productionTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffSolar productionTa5d6ff"Tb4b4b4, Te6edf3custom_iconTff7b72=Ta5d6ff"Ta5d6ffsolar-power-variantTa5d6ff"Tb4b4b4)

T8b949e# Create battery sensor
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdata Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffcharge_percentTa5d6ff"Tb4b4b4: Tffa657roundTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbattery_chargeTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffchargingTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffbattery_chargingTb4b4b4}

T8b949e# Create NVM sensor if enabled
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstorage_statsTb4b4b4:
Te6edf3mount_point Tff7b72= Tff7b72None
Tff7b72for Te6edf3partition Tff7b72in Te6edf3psutilTff7b72.Td2a8ffdisk_partitionsTb4b4b4(Tffa657allTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_diskTb4b4b4[Ta5d6ff"Ta5d6ffblkidTa5d6ff"Tb4b4b4] Tff7b72in Te6edf3partitionTff7b72.Td2a8ffdeviceTb4b4b4:
Te6edf3mount_point Tff7b72= Te6edf3partitionTff7b72.Td2a8ffmountpoint
Tff7b72break
Tff7b72if Te6edf3mount_pointTb4b4b4:
Te6edf3st Tff7b72= Te6edf3shutilTff7b72.Td2a8ffdisk_usageTb4b4b4(Te6edf3mount_pointTb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffnvmTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffnvmTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3capacityTff7b72=Te6edf3stTff7b72.Td2a8fftotalTb4b4b4, Te6edf3usedTff7b72=Te6edf3stTff7b72.Td2a8ffusedTb4b4b4, Te6edf3type_labelTff7b72=Tff7b72selfTff7b72.Td2a8fftarget_diskTb4b4b4[Ta5d6ff"Ta5d6fflabelTa5d6ff"Tb4b4b4]Tb4b4b4)

T8b949e# Create RAM sensors
Te6edf3ms Tff7b72= Te6edf3psutilTff7b72.Td2a8ffvirtual_memoryTb4b4b4(Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6fframTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fframTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3capacityTff7b72=Te6edf3msTff7b72.Td2a8fftotalTb4b4b4, Te6edf3usedTff7b72=Te6edf3msTff7b72.Td2a8ffusedTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffRAMTa5d6ff"Tb4b4b4)

T8b949e# Create CPU sensor
Te6edf3a Tff7b72= Te6edf3psutilTff7b72.Td2a8ffgetloadavgTb4b4b4(Tb4b4b4)
Te6edf3cps Tff7b72= T79c0ff0Tb4b4b4; Te6edf3cpms Tff7b72= T79c0ff5
Tff7b72for Te6edf3m Tff7b72in Tffa657rangeTb4b4b4(Te6edf3cpmsTb4b4b4)Tb4b4b4:
Te6edf3cps Tff7b72+Tff7b72= Te6edf3psutilTff7b72.Td2a8ffcpu_percentTb4b4b4(Tb4b4b4)Tff7b72/T79c0ff100.0
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.05Tb4b4b4)
Te6edf3cp Tff7b72= Te6edf3cpsTff7b72/Te6edf3cpms

Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffprocessorTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffprocessorTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Te6edf3current_loadTff7b72=Te6edf3cpTb4b4b4, Te6edf3clockTff7b72=Tffa657roundTb4b4b4(Te6edf3psutilTff7b72.Td2a8ffcpu_freqTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffcurrentTff7b72*T79c0ff1e6Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3load_avgsTff7b72=Tb4b4b4[Te6edf3aTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3aTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3aTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4]Tb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffCPUTa5d6ff"Tb4b4b4)

T8b949e# Create custom sensor for uptime
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4)
Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_entryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffuptimeTb4b4b4, Te6edf3type_labelTff7b72=Ta5d6ff"Ta5d6ffUptime isTa5d6ff"Tb4b4b4, Te6edf3custom_iconTff7b72=Ta5d6ff"Ta5d6fftimer-refresh-outlineTa5d6ff"Tb4b4b4)

T8b949e# Finally, tell Sideband what class in this
T8b949e# file is the actual plugin class.
Te6edf3plugin_class Tff7b72= Te6edf3ServerTelemetryPlugin

Served by rngit 1.4.2 - Generated in 0.04s